/*
 * CourseOrder.java
 * Copyright(C) 2020-2099 坚小持
 * All rights reserved.
 * -----------------------------------------------
 * 2020-10-16 Created
 */
package com.project.web.order.model.app;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @version 1.0 2020-10-16
 */
@ApiModel("课程订单")
@Data
public class MbrOrder {

    /**
     * 主键ID
     */
    @ApiModelProperty()
    private Long id;

    /**
     * 用户Id
     */
    @ApiModelProperty("用户Id")
    private String userId;

    /**
     * 商户交易号
     */
    @ApiModelProperty("商户交易号")
    private String transactionNo;

    /**
     * 订单号
     */
    @ApiModelProperty("订单号")
    private String orderNo;

    /**
     * 订单总金额
     */
    @ApiModelProperty("订单总金额")
    private BigDecimal totalAmt;

    /**
     * 实付金额
     */
    @ApiModelProperty("实付金额")
    private BigDecimal actualAmt;

    /**
     * 支付方式
     * 1：微信App支付
     * 2：支付宝App支付
     * 3:微信公众号支付
     */
    @ApiModelProperty("支付方式 1：微信App支付 2：支付宝App支付 3:微信公众号支付 4:小程序支付")
    private Integer payMode;

    /**
     * 订单状态
     * 1：未支付（已生成预支付ID)
     * 2：已取消（取消订单）
     * 3：支付成功（回调通知成功）
     * 4：支付失败（回调通知失败）
     * 5：订单退款
     */
    @ApiModelProperty("订单状态 1：未支付（已生成预支付ID)  2：已取消（取消订单） 3：支付成功（回调通知成功） 4：支付失败（回调通知失败） 5：订单退款")
    private Integer orderStatus;

    /**
     * 支付时间
     */
    @ApiModelProperty("支付时间")
    private Date payDate;

    /**
     * 订单备注
     */
    @ApiModelProperty("订单备注")
    private String orderRemark;

    /**
     * 订单类型 0：课程订单 1：商品订单
     */
    @ApiModelProperty("订单类型 0：课程订单 1：商品订单")
    private Integer orderType;

    /**
     * 公众号openId
     */
    @ApiModelProperty("订单类型 0：课程订单 1：商品订单")
    private String openId;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createDate;

    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    private Date modifyDate;

    /**
     * 订单明细
     */
    private List<MbrOrderItem> mbrOrderItems;

    /**************** 扩展字段 ***********************/
    /**
     * 用户昵称
     */
    @ApiModelProperty("用户昵称")
    private String nickName;

    /**
     * 用户手机号
     */
    @ApiModelProperty("用户手机号")
    private String phone;

    public enum ORDER_STATUS {
        NOT_PAY(1, "未支付(已生成预支付ID)"),
        CANCEL(2, "已取消(取消订单)"),
        SUCCESS(3, "支付成功（回调通知成功）"),
        PAY_FAIL(4, "支付失败（回调通知失败)"),
        ORDER_REFUND(5, "订单退款");

        private Integer value;
        private String name;

        ORDER_STATUS(Integer value, String name) {
            this.value = value;
            this.name = name;
        }

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    /**
     * 支付方式
     * 1：微信App支付
     * 2：支付宝App支付
     * 3:微信公众号支付
     */
    public enum PAY_MODEL {
        WX_APP_PAY(1, "微信App支付"),
        ALI_APP_PAY(2, "支付宝App支付"),
        WX_PUBLIC_PAY(3, "微信公众号支付"),
        WX_MINI_PAY(4, "小程序支付");

        private Integer value;
        private String name;

        PAY_MODEL(Integer value, String name) {
            this.value = value;
            this.name = name;
        }

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

}